/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 

//package components;

import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.JSlider;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;

import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

/* MenuDemo.java requires images/middle.gif. */

/*
 * This class is just like MenuLookDemo, except the menu items
 * actually do something, thanks to event listeners.
 */
public class MenuDemo implements ActionListener, ItemListener {
    JTextArea output;
    JScrollPane scrollPane;
    String newline = "\n";
//    private boolean m_isRunning;

    public JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenu menu;
//        JMenu submenu;
        JMenuItem menuItem;
//        JRadioButtonMenuItem rbMenuItem;
//        JCheckBoxMenuItem cbMenuItem;

        //Create the menu bar.
        menuBar = new JMenuBar();

        //Build the first menu.
        menu = new JMenu("Game");
        menu.setMnemonic(KeyEvent.VK_G);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);

        //a group of JMenuItems
        menuItem = new JMenuItem("New..",
                                 KeyEvent.VK_N);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_N, ActionEvent.CTRL_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menuItem.addActionListener(this);
        menu.add(menuItem);

        //ImageIcon icon = createImageIcon("images/middle.gif");
        //menuItem = new JMenuItem("Both text and icon", icon);
        menuItem = new JMenuItem("Exit", KeyEvent.VK_X);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,ActionEvent.ALT_MASK));
        menuItem.addActionListener(this);
        menu.add(menuItem);

//        menuItem = new JMenuItem(icon);
        menuItem.setMnemonic(KeyEvent.VK_D);
        menuItem.addActionListener(this);
        menu.add(menuItem);

        //a group of radio button menu items
//        menu.addSeparator();
//        ButtonGroup group = new ButtonGroup();
//
//        rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
//        rbMenuItem.setSelected(true);
//        rbMenuItem.setMnemonic(KeyEvent.VK_R);
//        group.add(rbMenuItem);
//        rbMenuItem.addActionListener(this);
//        menu.add(rbMenuItem);
//
//        rbMenuItem = new JRadioButtonMenuItem("Another one");
//        rbMenuItem.setMnemonic(KeyEvent.VK_O);
//        group.add(rbMenuItem);
//        rbMenuItem.addActionListener(this);
//        menu.add(rbMenuItem);
//
//        //a group of check box menu items
//        menu.addSeparator();
//        cbMenuItem = new JCheckBoxMenuItem("A check box menu item");
//        cbMenuItem.setMnemonic(KeyEvent.VK_C);
//        cbMenuItem.addItemListener(this);
//        menu.add(cbMenuItem);
//
//        cbMenuItem = new JCheckBoxMenuItem("Another one");
//        cbMenuItem.setMnemonic(KeyEvent.VK_H);
//        cbMenuItem.addItemListener(this);
//        menu.add(cbMenuItem);
//
//        //a submenu
//        menu.addSeparator();
//        submenu = new JMenu("A submenu");
//        submenu.setMnemonic(KeyEvent.VK_S);
//
//        menuItem = new JMenuItem("An item in the submenu");
//        menuItem.setAccelerator(KeyStroke.getKeyStroke(
//                KeyEvent.VK_2, ActionEvent.ALT_MASK));
//        menuItem.addActionListener(this);
//        submenu.add(menuItem);
//
//        menuItem = new JMenuItem("Another item");
//        menuItem.addActionListener(this);
//        submenu.add(menuItem);
//        menu.add(submenu);
//
//        //Build second menu in the menu bar.
//        menu = new JMenu("Another Menu");
//        menu.setMnemonic(KeyEvent.VK_N);
//        menu.getAccessibleContext().setAccessibleDescription(
//                "This menu does nothing");
//        menuBar.add(menu);

        return menuBar;
    }

    public Container createContentPane() {
        //Create the content-pane-to-be.
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setOpaque(true);
        
        //Create a scrolled text area.
        output = new JTextArea(5, 30);
        output.setEditable(false);
        scrollPane = new JScrollPane(output);

        //Add the text area to the content pane.
        contentPane.add(scrollPane, BorderLayout.CENTER);

        return contentPane;
    }
    public class KalahOptionsWindow extends JDialog implements ActionListener, ItemListener{
    	private boolean m_okPressed;
    	private JFrame m_frame;
    	private boolean m_topPlayerHuman;
    	private boolean m_botPlayerHuman;
    	private JRadioButton m_topHumanButton;
    	private JRadioButton m_botHumanButton;
    	private JRadioButton m_topCPUButton;
    	private JRadioButton m_botCPUButton;
    	private JButton m_okButton;
    	private JButton m_cancelButton;
    	public KalahOptionsWindow(){
    		createFrame();
    		m_okPressed = false;
    		m_topPlayerHuman = true;
    		m_botPlayerHuman = true;
    	}
    	public void buildUI(){
    		Container container = getContentPane();
            GridBagLayout gridbaglayout = new GridBagLayout();
            container.setLayout(gridbaglayout);
            JLabel jlabel = new JLabel("Top player: ");
            container.add(jlabel);
            gridbaglayout.setConstraints(jlabel, new GridBagConstraints(0, 0, 1, 1, 0.0D, 0.0D, 13, 0, new Insets(5, 5, 5, 5), 0, 0));
            m_topHumanButton = new JRadioButton("Human", m_topPlayerHuman);
            m_topHumanButton.addActionListener(this);
            container.add(m_topHumanButton);
            gridbaglayout.setConstraints(m_topHumanButton, new GridBagConstraints(1, 0, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
            m_topCPUButton = new JRadioButton("CPU", !m_topPlayerHuman);
            m_topCPUButton.addActionListener(this);
            container.add(m_topCPUButton);
            gridbaglayout.setConstraints(m_topCPUButton, new GridBagConstraints(2, 0, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
            JLabel jlabel1 = new JLabel("Bottom player: ");
            container.add(jlabel1);
            gridbaglayout.setConstraints(jlabel1, new GridBagConstraints(0, 1, 1, 1, 0.0D, 0.0D, 13, 0, new Insets(5, 5, 5, 5), 0, 0));
            m_botHumanButton = new JRadioButton("Human", m_botPlayerHuman);
            m_botHumanButton .addActionListener(this);
            container.add(m_botHumanButton);
            gridbaglayout.setConstraints(m_botHumanButton , new GridBagConstraints(1, 1, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
            m_botCPUButton = new JRadioButton("CPU", !m_botPlayerHuman);
            m_botCPUButton.addActionListener(this);
            container.add(m_botCPUButton);
            gridbaglayout.setConstraints(m_botCPUButton, new GridBagConstraints(2, 1, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
            JLabel jlabel2 = new JLabel("Number of beans:");
            container.add(jlabel2);
            gridbaglayout.setConstraints(jlabel2, new GridBagConstraints(0, 2, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
//            numberOfBeansSlider = new JSlider(0, MIN_NUMBER_OF_BEANS, MAX_NUMBER_OF_BEANS, numberOfBeans);
//            numberOfBeansSlider.setMajorTickSpacing(1);
//            numberOfBeansSlider.setLabelTable(numberOfBeansSlider.createStandardLabels(1));
//            numberOfBeansSlider.setPaintLabels(true);
//            numberOfBeansSlider.setSnapToTicks(true);
//            container.add(numberOfBeansSlider);
//            gridbaglayout.setConstraints(numberOfBeansSlider, new GridBagConstraints(1, 2, 2, 1, 0.0D, 0.0D, 10, 2, new Insets(5, 5, 5, 5), 0, 0));
//            JLabel jlabel3 = new JLabel("Game speed:");
//            container.add(jlabel3);
//            gridbaglayout.setConstraints(jlabel3, new GridBagConstraints(0, 3, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
//            speedSlider = new JSlider(0, MIN_SPEED, MAX_SPEED, speed);
//            speedSlider.setMajorTickSpacing(100);
//            speedSlider.setPaintTicks(false);
//            Hashtable hashtable = new Hashtable();
//            hashtable.put(new Integer(200), new JLabel("Fast"));
//            hashtable.put(new Integer(1400), new JLabel("Slow"));
//            speedSlider.setLabelTable(hashtable);
//            speedSlider.setPaintLabels(true);
//            container.add(speedSlider);
//            gridbaglayout.setConstraints(speedSlider, new GridBagConstraints(1, 3, 2, 1, 0.0D, 0.0D, 10, 2, new Insets(5, 5, 5, 5), 0, 0));
            m_okButton = new JButton("OK");
            m_okButton.addActionListener(this);
            container.add(m_okButton);
            gridbaglayout.setConstraints(m_okButton, new GridBagConstraints(1, 4, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));
            m_cancelButton = new JButton("Cancel");
            m_cancelButton.addActionListener(this);
            container.add(m_cancelButton);
            gridbaglayout.setConstraints(m_cancelButton, new GridBagConstraints(2, 4, 1, 1, 0.0D, 0.0D, 10, 0, new Insets(5, 5, 5, 5), 0, 0));

    	}
    	public void createFrame(){
        	m_frame = new JFrame("New Game Options");
        	m_frame.setDefaultCloseOperation(2);
        	m_frame.setSize(100,100);
        	m_frame.setVisible(true);
        	
        	//buildUI();
        }
    	
    	
		@Override
		public void actionPerformed(ActionEvent e) {
			JMenuItem source = (JMenuItem)(e.getSource());
	        String s = "Action event detected."
	                   + newline
	                   + "    Event source: " + source.getText()
	                   + " (an instance of " + getClassName(source) + ")";
	        output.append(s + newline);
	        output.setCaretPosition(output.getDocument().getLength());
//	        if(source.getText().equals("New..")){
//	        	System.out.println("NEW!!!");
//	     //   	createNewGameWindow();
//	        	KalahOptionsWindow kop = new KalahOptionsWindow();
//	        	kop.createNewGameWindow();
//	        }
//	        else if(source.getText().equals("Exit")){
//	        	System.exit(0);
//	        }
			
		}
		@Override
		public void itemStateChanged(ItemEvent arg0) {
			// TODO Auto-generated method stub
			
		}
    }
//    public void createNewGameWindow(){
//    	JFrame frame = new JFrame("New Game Options");
//    	frame.setDefaultCloseOperation(2);
//    	frame.setSize(100,100);
//    	frame.setVisible(true);
//    }
    public void actionPerformed(ActionEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        String s = "Action event detected."
                   + newline
                   + "    Event source: " + source.getText()
                   + " (an instance of " + getClassName(source) + ")";
        output.append(s + newline);
        output.setCaretPosition(output.getDocument().getLength());
        if(source.getText().equals("New..")){
        	System.out.println("NEW!!!");
     //   	createNewGameWindow();
        	KalahOptionsWindow kop = new KalahOptionsWindow();
//        	kop.createNewGameWindow();
        }
        else if(source.getText().equals("Exit")){
        	System.exit(0);
        }
    }

    public void itemStateChanged(ItemEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        String s = "Item event detected."
                   + newline
                   + "    Event source: " + source.getText()
                   + " (an instance of " + getClassName(source) + ")"
                   + newline
                   + "    New state: "
                   + ((e.getStateChange() == ItemEvent.SELECTED) ?
                     "selected":"unselected");
        output.append(s + newline);
        output.setCaretPosition(output.getDocument().getLength());
    }

    // Returns just the class name -- no package info.
    protected String getClassName(Object o) {
        String classString = o.getClass().getName();
        int dotIndex = classString.lastIndexOf(".");
        return classString.substring(dotIndex+1);
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = MenuDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
    	
        //Create and set up the window.
        JFrame frame = new JFrame("MenuDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        MenuDemo demo = new MenuDemo();
        frame.setJMenuBar(demo.createMenuBar());
        frame.setContentPane(demo.createContentPane());

        //Display the window.
        frame.setSize(450, 260);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
    	
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            	
                createAndShowGUI();
            }
        });
    }
}
